知识点名称:Bmob后端云数据操作
编号: K13-4
前驱知识点编号:K13-1
作者:
讲义内容:
1、添加数据
添加数据使用BmobObject对象的save方法,就可以将当前对象的内容保存到Bmob服务端。
例如,你现在要保存一条游戏分数的记录,代码如下:
GameScore gameScore = new GameScore();
//注意:不能调用gameScore.setObjectId("")方法
gameScore.setPlayerName("比目");
gameScore.setScore(89);
gameScore.setIsPay(false);
gameScore.save(new SaveListener<String>() {
@Override
public void done(String objectId, BmobException e) {
if(e==null){
toast("创建数据成功:" + objectId);
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}
})
运行以上代码,如果添加成功,你可以在Bmob提供的后台的数据浏览中看到类似这样的结果:
objectId: "0c6db13c", score: 89, playerName: "比目", isPay: false,createdAt:"2013-09-27 10:32:54", updatedAt:"2013-09-27 10:32:54"
2、删除数据
从服务器删除对象。例如:将GameScore表中objectId为dd8e6aff28的数据删除。
GameScore gameScore = new GameScore();
gameScore.setObjectId("dd8e6aff28");
gameScore.delete(new UpdateListener() {
@Override
public void done(BmobException e) {
if(e==null){
Log.i("bmob","成功");
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
3、修改数据
更新一个对象也是非常简单。例如:将GameScore表中objectId为0c6db13c的游戏分数修改为77.
GameScore gameScore = new GameScore();
gameScore.setScore(77);
gameScore.update("0c6db13c", new UpdateListener() {
@Override
public void done(BmobException e) {
if(e==null){
Log.i("bmob","更新成功");
}else{
Log.i("bmob","更新失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
自V3.4.4版本开始,SDK提供了另一种方法来更新数据,通过调用Bmobobject类中的setValue(key,value)方法,只需要传入key及想要更新的值即可
举例,说明如下:
public class Person extends BmobObject {
private BmobUser user; //BmobObject类型
private BankCard cards; //Object类型
private Integer age; //Integer类型
private Boolean gender; //Boolean类型
...
getter、setter方法
}
其中BankCard类结构如下:
public class BankCard{
private String cardNumber;
private String bankName;
public BankCard(String bankName, String cardNumber){
this.bankName = bankName;
this.cardNumber = cardNumber;
}
...
getter、setter方法
}
Person p2=new Person();
//更新BmobObject的值
// p2.setValue("user", BmobUser.getCurrentUser(this, MyUser.class));
//更新Object对象
p2.setValue("bankCard",new BankCard("农行", "农行账号"));
//更新Object对象的值
//p2.setValue("bankCard.bankName","建行");
//更新Integer类型
//p2.setValue("age",11);
//更新Boolean类型
//p2.setValue("gender", true);
p2.update(objectId, new UpdateListener() {
@Override
public void done(BmobException e) {
if(e==null){
Log.i("bmob","更新成功");
}else{
Log.i("bmob","更新失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
4、查询数据
数据的查询可能是每个应用都会频繁使用到的,BmobSDK中提供了BmobQuery类,它提供了多样的方法来实现不同条件的查询,同时它的使用也是非常的简单和方便的。
查询单条数据
当我们知道某条数据的objectId时,就可以根据objectId直接获取单条数据对象。例如:查询objectId为a203eba875的人员信息。
BmobQuery<GameScore> query = new BmobQuery<GameScore>();
query.getObject("a203eba875", new QueryListener<GameScore>() {
@Override
public void done(GameScore object, BmobException e) {
if(e==null){
//获得playerName的信息
object.getPlayerName();
//获得数据的objectId信息
object.getObjectId();
//获得createdAt数据创建时间(注意是:createdAt,不是createAt)
object.getCreatedAt();
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
查询多条数据
查询某个数据表中的所有数据是非常简单的查询操作,例如:查询GameScore表中playerName为“比目”的50条数据记录。
BmobQuery<GameScore> query = new BmobQuery<GameScore>();
//查询playerName叫“比目”的数据
query.addWhereEqualTo("playerName", "比目");
//返回50条数据,如果不加上这条语句,默认返回10条数据
query.setLimit(50);
//执行查询方法
query.findObjects(new FindListener<GameScore>() {
@Override
public void done(List<GameScore> object, BmobException e) {
if(e==null){
toast("查询成功:共"+object.size()+"条数据。");
for (GameScore gameScore : object) {
//获得playerName的信息
gameScore.getPlayerName();
//获得数据的objectId信息
gameScore.getObjectId();
//获得createdAt数据创建时间(注意是:createdAt,不是createAt)
gameScore.getCreatedAt();
}
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
查询的结果不需要进行任何处理,BmobSDK已经封装成相应的JavaBean集合了,直接使用即可。